package com.cow.util;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration // 必须存在
@EnableSwagger2 // 必须存在
@EnableWebMvc // 必须存在
@ComponentScan(basePackages = { "com.cow.controller" })
public class ApplicationSwaggerConfig {

	// Docket类的方法：
	// Docket groupName(String var):设置栏目名
	// Docket apiInfo(ApiInfo apiInfo):设置文档信息
	// Docket pathMapping(String path):设置api根路径
	// Docket protocols(Set<String>
	// protocols):设置协议，Sets为com.goolge.common下的类，Sets.newHashSet("https","http")相当于new
	// HashSet(){{add("https");add("http");}};
	// ApiSelectorBuilder select():初始化并返回一个API选择构造器
	//
	// ApiSelectorBuilder类的方法：
	// ApiSelectorBuilder apis(Predicate<RequestHandler>
	// selector):添加选择条件并返回添加后的ApiSelectorBuilder对象
	// ApiSelectorBuilder paths(Predicate<String>
	// selector):设置路径筛选，该方法中含一句pathSelector = and(pathSelector, selector);表明条件为相与
	//
	// RequestHandlerSelectors类的方法：
	// Predicate<RequestHandler> any()：返回包含所有满足条件的请求处理器的断言，该断言总为true
	// Predicate<RequestHandler> none()：返回不满足条件的请求处理器的断言,该断言总为false
	// Predicate<RequestHandler> basePackage(final String
	// basePackage)：返回一个断言(Predicate)，该断言包含所有匹配basePackage下所有类的请求路径的请求处理器
	//
	// PathSelectors类的方法：
	// Predicate<String> any():满足条件的路径，该断言总为true
	// Predicate<String> none():不满足条件的路径,该断言总为false
	// Predicate<String> regex(final String pathRegex):符合正则的路径

	@Bean
	public Docket customDocket() {
		//
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
	}

	@SuppressWarnings("deprecation")
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder().title("云开荒API")// 标题
				.description("光环and鬼泣")// 描述
				.contact("光环and鬼泣") // 联系人
				.version("1.0") // 版本
				.build();
	}

}